#include "../include/ode_util.h"
#include <iomanip>

float ode_norm2(int len,const float* arr)
{
 int i;
 float sum=0;
 for(i=0;i<len;i++)sum+=arr[i]*arr[i];
 return sum;
}
double ode_norm2(int len,const double* arr)
{
 int i;
 float sum=0;
 for(i=0;i<len;i++)sum+=arr[i]*arr[i];
 return sum;
}
float ode_norm2(int len,const float* arr,const float * w)
{
 int i;
 float sum=0,s;
 for(i=0;i<len;i++)
 {
  s=arr[i]*w[i];
  sum+=s*s;
 }
 return sum;
}
double ode_norm2(int len,const double* arr,const double * w)
{
 int i;
 float sum=0,s;
 for(i=0;i<len;i++)
 {
  s=arr[i]*w[i];
  sum+=s*s;
 }
 return sum;
}

void ode_sum(int n,const float* k,int len,const float** poi,float* res)
{
 int i,j;
 float tmp;
 for(j=0;j<len;j++)
 {
  tmp=0;
  for(i=0;i<n;i++)
  {
   tmp+=poi[i][j]*k[i];
  }
  res[j]=tmp;
 }
}
void ode_sum(int n,const double* k,int len,const double** poi,double* res)
{
 int i,j;
 double tmp;
 for(j=0;j<len;j++)
 {
  tmp=0;
  for(i=0;i<n;i++)
  {
   tmp+=poi[i][j]*k[i];
  }
  res[j]=tmp;
 }
}

void ode_pt(ostream& s,int len,const double* x)
{
 for(int i=0;i<len;i++)
 {
  s<<setw(15)<<x[i];
 }
}
void ode_pt(ostream& s,int len,const float* x)
{
 for(int i=0;i<len;i++)
 {
  s<<setw(15)<<x[i];
 }
}
